"""
Python 定义函数使用 def 关键字，一般格式如下：
def 函数名（参数列表）:
    函数体
    return
"""
def hello():
    print("hello world!")
hello()

"""比较两个数，并返回较大的数:"""
def max(a,b):
    if a>b:
        return a
    else:
        return b
a = 4
b = 5
print(max(a,b))

"""计算面积函数"""
def area(width,height):
    return(width*height)
w = 4
h = 5
print("width=",w,"height=",h,"area=",area(w,h))

"""调用了 printme() 函数："""
def printme(str): # 定义函数
    print(str)  # 打印任何传入的参数
    return
# 调用函数
printme("good good study")
printme("day day up")

"""可变对象在函数里修改了参数，那么在调用这个函数的函数里，原始的参数也被改变了"""
def changeme(a):
    a.append([1,2,3,4])
    print("函数的内取值：",a)
    return a
# 调用函数
mylist = [10,20,30,40]
changeme(mylist)
print("函数的外取值：",mylist)

"""无参计算
def sum():
    sum=0
    for n in range(1,101):
        sum+=n
    return sum
print(sum())
"""
# 有参计算1-100的值，灵活
def sum(a,b):
    sum1=0
    for n in range(a,b+1):
        sum1+=n
    return sum1
a=2
b=100
sum2=sum(a,b)
print("a到b之和：",sum2)

def printme(str):
    print(str)
    return
printme(str="菜鸟教程")

"""
函数参数的使用不需要使用指定顺序：
"""
def printinfo(name,age):
    print("名字：",name)
    print("年龄：",age)
    return
printinfo(age=20,name="google")

"""调用函数时，如果没有传递参数，则会使用默认参数。以下实例中如果没有传入 age 参数，则使用默认值："""
def printinfo(name="taobao",age=35):
    print("名字：",name)
    print("年龄：",age)
    return
printinfo()
printinfo(name="JD")

"""不定长参数：加了星号 * 的参数会以元组(tuple)的形式导入，存放所有未命名的变量参数"""
def printinfo(arg1,*vartuple):
    "打印任何传入的参数"
    print("输出：")
    print("参数1：",arg1)
    print("参数2：",vartuple)
# 调用printinfo 函数
printinfo(70,60,50)

def printinfo(arg1,*vartuple):
    "只打印传入第二个参数"
    print("输出：")
    # print(arg1)
    for var in vartuple:
        print("参数2里的元素：",var)
    return
# 调用printinfo 函数
printinfo(70,60,50)

"""不定长参数：加了两个星号 ** 的参数会以字典的形式导入"""
def printinfo(arg1,**vardict):
    print("输出：")
    print("参数1：",arg1)
    print("参数2:",vardict)
# 调用printinfo 函数
printinfo(1,a=2,b=3)

"""如果单独出现星号 *，则星号 * 后的参数必须用关键字传入："""
def f(a,b,*,c):
    return a+b+c
sum=f(1,2,c=3)
print("sum=",sum)

"""匿名函数"""
x = lambda a : a+10
print("匿名函数：",x(5))

sum = lambda n1,n2:n1+n2
# 调用sum函数
print("相加后的值为：",sum(10,20))

"""在 python 中，strings, tuples, 和 numbers 是不可更改的对象，而 list,dict 等则是可以修改的对象"""

def sum(arg1, arg2):
    # 返回2个参数的和."
    total = arg1 + arg2
    print("函数内total : ", total)
    return total
# 需要返回结果给外部函数，就需要写return
# 调用sum函数
total_new= sum(10, 20)
print("函数外total_new : ", total_new)

total2=0
def sum2(arg1, arg2):
    # 返回2个参数的和."
    total2 = arg1 + arg2
    print("函数内total2 : ", total2)
    return
# 需要返回结果给外部函数，就需要写return
# 调用sum函数
sum2(10, 20)
print("函数外total2 : ", total2)

def print99():
    b=""
    for n1 in range(1,10):
        for n2 in range(1,10):
            if n2>n1:
                break
            c=n1*n2
            b =b+ '{0}x{1}={2} '.format(n1,n2,c)
        b=b+"\n"
    return b
list99=print99()
print(list99)

# 将数字转换成字符串，拼接打印
def number10():
    b = ""
    for i in range(1, 11):
        b = b + "{},".format(i)
    c = b[0:len(b) - 1]
    return c
cc = number10()
print(cc)




